const { exec } = require('child_process')
const net = require('net')

console.log('正在停止3001端口的服务...')

// 检查端口是否被占用
function isPortInUse(port) {
  return new Promise((resolve) => {
    const server = net.createServer()
    server.listen(port, () => {
      server.close()
      resolve(false) // 端口可用
    })
    server.on('error', (err) => {
      if (err.code === 'EADDRINUSE') {
        resolve(true) // 端口被占用
      } else {
        resolve(false)
      }
    })
  })
}

// 停止端口上的服务
async function stopPortService(port) {
  console.log(`🔍 检查端口 ${port} 是否被占用...`)
  const portInUse = await isPortInUse(port)
  
  if (!portInUse) {
    console.log(`端口 ${port} 没有被占用`)
    return
  }

  console.log(`端口 ${port} 被占用，正在查找进程...`)

  return new Promise((resolve) => {
    // Windows 系统
    if (process.platform === 'win32') {
      // 使用更简单的方法：直接查找并停止进程
      exec(`for /f "tokens=5" %a in ('netstat -ano ^| findstr :${port}') do taskkill /F /PID %a`, (error) => {
        if (error) {
          console.log(`端口 ${port} 没有被占用或已停止`)
        } else {
          console.log(`端口 ${port} 的服务已停止`)
        }
        resolve()
      })
    } else {
      // Unix/Linux 系统
      exec(`lsof -ti:${port} | xargs kill -9`, (error) => {
        if (error) {
          console.log(`端口 ${port} 没有被占用`)
        } else {
          console.log(`端口 ${port} 的服务已停止`)
        }
        resolve()
      })
    }
  })
}

// 主函数
async function main() {
  try {
    await stopPortService(3001)
    console.log('服务停止完成')
  } catch (error) {
    console.error('停止服务失败:', error)
    process.exit(1)
  }
}

main() 